package models

import (
	"github.com/jinzhu/gorm"
	"time"
)

type User struct {
	Id            int       `gorm:"column:user_id;primary_key;not null;auto_increment" json:"user_id" form:"user_id"`
	Username      string    `grom:"column:username;not null;default:''" json:"username" form:"username"`
	QQOpenid      string    `gorm:"column:qq_open_id;default:null;" json:"qq_openid" form:"qq_openid"`
	Password      string    `gorm:"column:password;not null;default:''" json:"password" form:"password"`
	UserEmail     string    `gorm:"column:user_eamil;not null;default:''" json:"user_email" form:"user_email"`
	UserEmailCode string    `gorm:"column:user_eamil_code;default:null" json:"user_email_code" form:"user_eamil_code"`
	IsActive      string    `gorm:"column:is_active;type:enum('是','否');default:'否';" json:"is_active" form:"is_active"`
	UserSex       string    `gorm:"column:user_sex;type:enum('保密','女','男');default:'男'" json:"user_sex" form:"user_sex"`
	UserQQ        string    `gorm:"column:user_qq;not null;default:''" json:"user_qq" form:"user_qq"`
	UserTel       string    `gorm:"column:user_tel;not null;;default:''" json:"user_tel" form:"user_tel"`
	UserXueli     string    `gorm:"column:user_xueli;type:enum('博士','硕士','本科','专科','高中','初中','小学');not null;default:'本科'" json:"user_xueli" form:"user_xueli"`
	UserHobby     string    `gorm:"column:user_hobby;not null;default:''" json:"user_hobby" form:"user_hobby"`
	UserIntroduce string    `gorm:"column:user_introduce;type:text;" json:"user_introduce" form:"user_introduce"`
	Create_time   time.Time `grom:"column:create_time;not null" json:"create_time" form:"create_time"`
	Update_time   time.Time `grom:"column:update_time;not null" json:"update_time" form:"update_time"`
}

func (User) TableName() string {
	return "sp_user"
}

type Manager struct {
	Id          int       `gorm:"column:mg_id;primary_key;not null;auto_increment" json:"id" form:"mg_id"`
	Username    string    `gorm:"column:mg_name;not null" json:"username" form:"mg_name"`
	Password    string    `gorm:"column:mg_pwd;not null;" json:"password" form:"mg_pwd"`
	RoleId      int       `gorm:"column:role_id;not null;default:5" json:"role_id" form:"role_id"`
	Mobile      string    `gorm:"column:mg_mobile;default:null;" json:"mobile" form:"mg_mobile"`
	Email       string    `gorm:"column:mg_email;default:null" json:"email" form:"mg_email"`
	State       int       `gorm:"column:mg_state;default:1" json:"state" form:"mg_state"`
	Create_time time.Time `grom:"column:create_time;not null" json:"create_time" form:"create_time"`
	Update_time time.Time `grom:"column:update_time;not null" json:"update_time" form:"update_time"`
	//Role Role `gorm:"ForeignKey:RoleId;AssociationForeignKey:ID" json:"role" form:"role"`
}

func (Manager) TableName() string {
	return "sp_manager"
}

func (manager *Manager) BeforeCreate(scope *gorm.Scope) error {
_:
	scope.SetColumn("Create_time", time.Now())
_:
	scope.SetColumn("Update_time", time.Now())
	return nil
}

func (manager *Manager) BeforeUpdate(scope *gorm.Scope) error {
	return scope.SetColumn("Update_time", time.Now())
}

type Role struct {
	ID   int    `gorm:"column:role_id;primary_key;not null;auto_increment" json:"id" form:"id"`
	Name string `gorm:"column:role_name;not null" json:"name" form:"name"`
	Pids string `gorm:"column:ps_ids;not null" json:"pids" form:"pids"`
	Pca  string `gorm:"column:ps_ca;type:text" json:"ca" form:"ca"`
	Desc string `gorm:"column:role_desc;type:text" json:"desc" form:"desc"`
}

func (Role) TableName() string {
	return "sp_role"
}

type Permission struct {
	ID     int    `gorm:"column:ps_id;primary_key;not null;auto_increment" json:"id" form:"id"`
	Name   string `gorm:"column:ps_name;not null" json:"name" form:"name"`
	Pid    int    `gorm:"column:ps_pid;not null" json:"pid" form:"pid"`
	Pc     string `gorm:"column:ps_c;not null" json:"contro" form:"contro"`
	Pa     string `gorm:"column:ps_a;not null" json:"func" form:"func"`
	PLevel string `gorm:"column:ps_level;type:enum('0','2','1');default:'0';not null" json:"level" form:"level"`
}

func (Permission) TableName() string {
	return "sp_permission"
}

type PermissionApi struct {
	ID        int        `gorm:"column:id;primary_key;not null;auto_increment" json:"id" form:"id"`
	Pid       int        `gorm:"column:ps_id;not null" json:"pid" form:"pid"`
	ApiServer string     `gorm:"column:ps_api_service;default:null" json:"api_service" form:"api_service"`
	ApiAction string     `gorm:"column:ps_api_action;default:null" json:"api_action" form:"api_action"`
	ApiPath   string     `gorm:"column:ps_api_path;default:null" json:"api_path" form:"api_path"`
	ApiOrder  int        `gorm:"column:ps_api_order;default:null" json:"api_order" form:"api_order"`
	Per       Permission `gorm:"foreignkey:Pid"`
}

func (PermissionApi) TableName() string {
	return "sp_permission_api"
}

type Product struct {
	Id          int       `gorm:"column:id;primary_key;not null;auto_increment" json:"id" form:"id"`
	Name        string    `gorm:"column:name;not null" json:"name" form:"name"`
	Image       string    `grom:"column:image;not_null;default:'static/upload/product/p30.jpg'" json:"image" form:"image"`
	Price       int       `grom:"column:price;not null" json:"price" form:"price"`
	Sale_price  int       `grom:"column:sale_price;not null" json:"sale_price" form:"sale_price"`
	Sale_point  string    `grom:"column:sale_point;not null" json:"sale_point" form:"sale_point"`
	Type_id     int       `grom:"column:type_id;not null" json:"type_id" form:"type_id"`
	Type_name   string    `grom:"column:type_name;not null" json:"type_name" form:"type_name"`
	Flag        int       `grom:"column:flag;not null" json:"flag" form:"flag"`
	Create_time time.Time `grom:"column:create_time;not null" json:"create_time" form:"create_time"`
	Update_time time.Time `grom:"column:update_time;not null" json:"update_time" form:"update_time"`
	Create_user int       `grom:"column:create_user;not null" json:"create_user" form:"create_user"`
	Update_user int       `grom:"column:update_user;not null" json:"update_user" form:"update_user"`
}

type Category struct {
	ID      int    `gorm:"column:cat_id;primary_key;not null;auto_increment" json:"cat_id"`
	Name    string `gorm:"column:cat_name;not null" json:"cat_name" form:"cat_name"`
	Pid     int    `gorm:"column:cat_pid;default:0" json:"cat_pid"`
	Level   int    `gorm:"column:cat_level;default:0" json:"cat_level"`
	Deleted bool   `gorm:"column:cat_deleted;default:false" json:"cat_deleted"`
	Icon    string `gorm:"column:cat_icon;default:null" json:"cat_icon"`
	Src     string `gorm:"column:cat_src;" json:"cat_src"`
}

func (Category) TableName() string {
	return "sp_category"
}

type ShopAttribute struct {
	ID         int       `gorm:"column:attr_id;primary_key;not null;auto_increment" json:"attr_id"`
	Name       string    `gorm:"column:attr_name;not null" json:"attr_name"`
	CatID      int       `gorm:"column:cat_id;not null" json:"cat_id"`
	AttrSel    string    `gorm:"column:attr_sel;type:enum('only', 'many');not null;default:'only'" json:"attr_sel"`
	AttrWrite  string    `gorm:"column:attr_write;type:enum('manual','list');not null;default:'manual'" json:"attr_write"`
	AttrVals   string    `gorm:"column:attr_vals;type:text;not null" json:"attr_vals"`
	DeleteTime time.Time `grom:"column:delete_time;default:null" json:"delete_time"`
}

func (ShopAttribute) TableName() string {
	return "sp_attribute"
}

type Goods struct {
	ID         int     `gorm:"column:goods_id;primary_key;not null;auto_increment" json:"goods_id"`
	Name       string  `gorm:"column:goods_name;not null" json:"goods_name"`
	Price      float64 `gorm:"column:goods_price;type:decimal(10,2);not null;default:0.00" json:"goods_price"`
	Number     int     `gorm:"column:goods_number;not null;default:0" json:"goods_number"`
	Weight     int     `gorm:"column:goods_weight;not null;default:0" json:"goods_weight"`
	CatID      int     `gorm:"column:cat_id;not null;default:0" json:"cat_id"`
	Introduce  string  `gorm:"column:goods_introduce;" json:"goods_introduce"`
	BigLogo    string  `gorm:"column:goods_big_logo;not null;default:''" json:"goods_big_logo"`
	SmallLogo  string  `gorm:"column:goods_small_logo;not null;default:''" json:"goods_small_logo"`
	IsDel      string     `gorm:"column:is_del;type: enum(0,1);not null;default:0" json:"is_del"`
	AddTime    int64     `grom:"column:add_time;not null" json:"add_time"`
	UpdateTime int64     `grom:"column:update_time;not null" json:"update_time"`
	DeleteTime int64     `grom:"column:delete_time;default:null" json:"delete_time"`
	CatOneID   int     `gorm:"column:cat_one_id;default:0" json:"cat_one_id"`
	CatTwoID   int     `gorm:"column:cat_two_id;default:0" json:"cat_two_id"`
	CatThreeID int     `gorm:"column:cat_three_id;default:0" json:"cat_three_id"`
	HotNumber  int     `gorm:"column:hot_mumber;default:0" json:"hot_number"`
	IsPromote  int     `gorm:"column:is_promote;default:0" json:"is_promote"`
	GoodsState int     `gorm:"column:goods_state;default:0" json:"goods_state"`
}

func (Goods) TableName() string {
	return "sp_goods"
}

type GoodsAttr struct {
	ID        int     `gorm:"column:id;primary_key;not null;auto_increment" json:"id"`
	GoodsID   int     `gorm:"column:goods_id;not null" json:"goods_id"`
	AttrID    int     `gorm:"column:attr_id" json:"attr_id"`
	AttrValue string  `gorm:"column:attr_value;not null" json:"attr_value"`
	AddPrice  float32 `gorm:"column:add_price;type:decimal(8,2);default:null" json:"add_price"`
}

func (GoodsAttr) TableName() string {
	return "sp_goods_attr"
}

type GoodsCats struct {
	ID         int     `gorm:"column:cat_id;primary_key;not null;auto_increment" json:"cat_id"`
	ParentID   int     `gorm:"column:parent_id;not null" json:"parent_id"`
	CatName    string     `gorm:"column:cat_name;not null" json:"cat_name"`
	IsShow     string  `gorm:"column:is_show;not null;default:1" json:"is_show"`
	CatSort    int `gorm:"column:cat_sort;not null;default:null" json:"cat_sort"`
	DataFlag   int `gorm:"column:data_flag;not null;default:1" json:"data_flag"`
	CreateTime int `gorm:"column:create_time;not null" json:"create_time"`
}

func (GoodsCats) TableName() string {
	return "sp_goods_cats"
}

type GoodsPics struct {
	PicsID  int    `gorm:"column:pics_id;primary_key;not null;auto_increment" json:"cat_id"`
	GoodsID int    `gorm:"column:goods_id;not null" json:"goods_id"`
	PicsBig string `gorm:"column:pics_big;not null" json:"pics_big"`
	PicsMid string `gorm:"column:pics_mid;not null" json:"pics_mid"`
	PicsSma string `gorm:"column:pics_sma;not null" json:"pics_sma"`
}

func (GoodsPics) TableName() string {
	return "sp_goods_pics"
}

type GoodsForm struct {
	GoodsName       string  `json:"goods_name"`
	GoodsPrice      string `json:"goods_price"`
	GoodsNumber     string     `json:"goods_number"`
	GoodsWeight     string     `json:"goods_weight"`
	GoodsCat      string     `json:"goods_cat"`
	GoodsIntroduce  string  `json:"goods_introduce"`
	Attrs []GoodsAttr `json:"attrs"`
	Pics []map[string]string `json:"pics"`
}

type Order struct {
	ID  int    `gorm:"column:order_id;primary_key;not null;auto_increment" json:"order_id"`
	UserID int    `gorm:"column:user_id;not null" json:"user_id"`
	OrderNumber string  `gorm:"column:order_number;not null;unique" json:"order_number"`
	OrderPrice float64 `gorm:"column:order_price;not null;default:0.00" json:"order_price"`
	OrderPay string `gorm:"column:order_pay;type:enum('0','1','2','3');not null;default:'1'" json:"order_pay"`
	IsSend string `gorm:"column:is_send;not null;default:'否'" json:"is_send"`
	TradeNo string `gorm:"column:trade_no;not null;default:''" json:"trade_no"`
	OrderFapiaoTitle string `gorm:"column:order_fapiao_title;type:enum('个人','公司');not null;default:'个人'" json:"order_fapiao_title"`
	OrderFapiaoCompany string `gorm:"column:order_fapiao_company;not null;default:''" json:"order_fapiao_company"`
	OrderFapiaoContent string `gorm:"column:order_fapiao_content;not null;default:''" json:"order_fapiao_content"`
	ConsigneeAddr string `gorm:"column:consignee_addr;type:text;not null;" json:"consignee_addr"`
	PayStatus bool `gorm:"column:pay_status;type:enum('0','1');not null;default:'0'" json:"pay_status"`
	CreateTime  int64  `grom:"column:create_time;not null" json:"create_time"`
	UpdateTime int64  `grom:"column:update_time;not null" json:"update_time"`
}

func (Order) TableName() string {
	return "sp_order"
}

type GoodsOrder struct {
	ID  int    `gorm:"column:id;primary_key;not null;auto_increment" json:"id"`
	OrderID  int    `gorm:"column:order_id;not null" json:"order_id"`
	GoodsID  int    `gorm:"column:goods_id;not null" json:"goods_id"`
	GoodsPrice  float64 `gorm:"column:goods_price;type:decimal(10,2);not null;default:0.00" json:"goods_price"`
	GoodsNumber int     `gorm:"column:goods_number;not null;default:0" json:"goods_number"`
	GoodsTotalPrice float64 `gorm:"column:goods_total_price;type:decimal(10,2);not null;default:0.00" json:"goods_total_price"`
}

func (GoodsOrder) TableName() string {
	return "sp_order_goods"
}

type Report struct {
	ID  int    `gorm:"column:id;primary_key;not null;auto_increment" json:"id"`
	UserCount int `gorm:"column:rp1_user_count;default:null" json:"rp1_user_count"`
	Area string `gorm:"column:rp1_area;default:null" json:"rp1_area"`
	Date  time.Time `gorm:"column:rp1_date;default:null" json:"rp1_date"`
}

func (Report) TableName() string {
	return "sp_report_1"
}
